package com.yztstudy.Controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yztstudy.clients.CategoryFeignClient;
import com.yztstudy.entity.Category;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 页面跳转的表示层
 */

@Controller
@RequestMapping
@Slf4j
public class HtmlJumpController {

    @Resource
    private CategoryFeignClient categoryClient;

    /**
     * TODO 设计欢迎页面跳转controller
     * @return login 登录页面
     */
    @GetMapping({"/","index.html","index"})
    public String welcome(){
        log.info("HtmlJumpController.welcome 跳转登录页面!");
        return "login";
    }


    /**
     * TODO 登录成功跳转到index页面!
     * @return
     */
    @GetMapping("/home")
    public String home(){
        log.info("HtmlJumpController.home登录成功,跳转程序首页!index页面!");
        return "index";
    }


    /**
     * TODO 跳转用户管理页面
     */
    @GetMapping("/user")
    public String user(){
        log.info("HtmlJumpController.user,跳转用户管理!user页面!");
        return "user/user";
    }


    /**
     * TODO 跳转商品管理页面
     */
    @GetMapping("/product")
    public String product(){
        log.info("HtmlJumpController.product,跳转商品管理!product页面!");
        return "product/product";
    }


    /**
     * TODO 跳转类别管理页面
     */
    @GetMapping("/category")
    public String category(){
        log.info("HtmlJumpController.category,跳转用户管理!category页面!");
        return "category/category";
    }


    /**
     * TODO 跳转订单管理页面
     */
    @GetMapping("/order")
    public String order(){
        log.info("HtmlJumpController.order,跳转用户管理!order页面!");
        return "order/order";
    }


    /**
     * TODO 打开编辑用户页面
     */
    @GetMapping("/user/update/html")
    public String userUpdateHtml(){
        log.info("HtmlJumpController.userUpdateHtml业务结束，结果:{}");
        return "user/edit";
    }


    /**
     * TODO 打开编辑用户页面
     */
    @GetMapping("/user/save/html")
    public String userSaveHtml(){
        log.info("HtmlJumpController.userSaveHtml业务结束，结果:{}");
        return "user/add";
    }


    /**
     * TODO 打开编辑类别页面
     */
    @GetMapping("/category/update/html")
    public String categoryUpdateHtml(){
        log.info("HtmlJumpController.categoryUpdateHtml业务结束，结果:{}");
        return "category/edit";
    }


    @GetMapping("/category/save/html")
    public String categorySaveHtml(){
        log.info("HtmlJumpController.categorySaveHtml结束，结果:{}");
        return "category/add";
    }


    /**
     * TODO 商品保存页面跳转
     * @return
     */
    @GetMapping("/product/save/html")
    public String productSaveHtml(Model model){
        log.info("HtmlJumpController.productSaveHtml业务结束，结果:{}");

        //查询类别列表,存入共享域
        List<Category> list = new ArrayList<>();
        list = (List<Category>) categoryClient.list().getData();

        //转换称JSON格式
        ObjectMapper objectMapper = new ObjectMapper();
        String strJSON = null;
        try {
            strJSON = objectMapper.writeValueAsString(list);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        //重新变回原来的样子
        try {
            list = objectMapper.readValue(strJSON, new TypeReference<List<Category>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        model.addAttribute("clist",list);
        return "product/add";
    }


    /**
     * TODO 商品保存页面跳转
     * @return
     */
    @GetMapping("/product/update/html")
    public String productUpdateHtml(Model model){
        log.info("HtmlJumpController.productUpdateHtml业务结束，结果:{}");

        //查询类别列表,存入共享域
        List<Category> list = new ArrayList<>();
        list = (List<Category>) categoryClient.list().getData();

        //转换称JSON格式
        ObjectMapper objectMapper = new ObjectMapper();
        String strJSON = null;
        try {
            strJSON = objectMapper.writeValueAsString(list);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        //重新变回原来的样子
        try {
            list = objectMapper.readValue(strJSON, new TypeReference<List<Category>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        model.addAttribute("clist",list);
        return "product/edit";
    }
}
